bitkeeper revision 1.1389.5.34 (427df40e93QBBJSf6UjtUfrHOApBXA)
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Sun, 8 May 2005 11:12:14 +0000 (11:12 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Sun, 8 May 2005 11:12:14 +0000 (11:12 +0000)
Fix process destruction: we should clear the LDT before calling
destroy_context().
Signed-off-by: Keir Fraser <keir@xensource.com>
linux-2.6.11-xen-sparse/arch/xen/i386/mm/init.c
linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c

index e3a588e0292796a983cd2124e197546a522d51be..b571bd6aaf23c1d28a3ad024e715e0bd87be8182 100644 (file)
@@ -361,6 +361,7 @@ static void __init pagetable_init (void)
        make_page_writable(old_pgd);
        __flush_tlb_all();
        free_bootmem(__pa(old_pgd), PAGE_SIZE);
+       init_mm.context.pinned = 1;
 
        kernel_physical_mapping_init(pgd_base);
        remap_numa_kva();
index 59399cceff084668b688f09db9e81df7795a1b2d..0215422a5aa98641cbee8fe14071324ff783cf77 100644 (file)
@@ -22,6 +22,7 @@
 #include <asm/tlb.h>
 #include <asm/tlbflush.h>
 #include <asm/io.h>
+#include <asm/mmu_context.h>
 
 #include <asm-xen/foreign_page.h>
 
@@ -480,7 +481,6 @@ void mm_unpin(struct mm_struct *mm)
 
 void _arch_exit_mmap(struct mm_struct *mm)
 {
-    unsigned int cpu = smp_processor_id();
     struct task_struct *tsk = current;
 
     task_lock(tsk);
@@ -494,9 +494,7 @@ void _arch_exit_mmap(struct mm_struct *mm)
         tsk->active_mm = &init_mm;
         atomic_inc(&init_mm.mm_count);
 
-        cpu_set(cpu, init_mm.cpu_vm_mask);
-        load_cr3(swapper_pg_dir);
-        cpu_clear(cpu, mm->cpu_vm_mask);
+        switch_mm(mm, &init_mm, tsk);
 
         atomic_dec(&mm->mm_count);
         BUG_ON(atomic_read(&mm->mm_count) == 0);